/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package OpenCodes.Servicios.Ciudad;

import OpenCodes.Dominio.Ciudad;
import OpenCodes.Persistencia.AbstractDB;
import OpenCodes.Persistencia.MySQL.Ciudad.ICiudadRepositorio;
import OpenCodes.Persistencia.RepositorioException;
import OpenCodes.Servicios.ServicioException;
import OpenCodes.Servicios.ServicioGenerico;
import OpenCodes.UI.IUsuarioInterfazCiudad;
import java.util.List;

/**
 *
 * @author Administrador
 */
public class CiudadServicio implements ICiudadServicio{
    
    private AbstractDB fabricaDb;
    @Override
    public void init(IUsuarioInterfazCiudad ui) {
       fabricaDb = AbstractDB.getInstance();
    }

    @Override
    public void agregar(IUsuarioInterfazCiudad ui) throws ServicioException {
        //throw new UnsupportedOperationException("Not supported yet.");
       
        if (existe(ui.getNombreCiudad())){
            throw new ServicioException("Ya existe una ciudad con el mismo nombre");
        }

        Ciudad ciudad = new Ciudad(ui.getIdCiudad(), ui.getNombreCiudad());

        ICiudadRepositorio repo;

        try {
            repo = fabricaDb.getCiudadRepositorio();
            repo.agregar(ciudad);

        } catch (RepositorioException e) {
            throw new ServicioException("Fallo la incorporacion de la ciudad Nombre:" + ciudad.getNombre(), e);
        }
    }

    @Override
    public void modificar(IUsuarioInterfazCiudad ui) throws ServicioException {
        //throw new UnsupportedOperationException("Not supported yet.");
        Ciudad ciudad = new Ciudad(ui.getIdCiudad(), ui.getNombreCiudad());

        ICiudadRepositorio repo;

        try {
            repo = fabricaDb.getCiudadRepositorio();
            repo.modificar(ciudad);

        } catch (RepositorioException e) {
            throw new ServicioException("Fallo la modificacion de la ciudad: Id:" + ciudad.getId() + ", Nombre: " + ciudad.getNombre(), e);
        }
    }

    @Override
    public void eliminar(IUsuarioInterfazCiudad ui) throws ServicioException {
        //throw new UnsupportedOperationException("Not supported yet.");
        Ciudad ciudad = new Ciudad(ui.getIdCiudad(), ui.getNombreCiudad());

        ICiudadRepositorio repo;

        try {
            repo = fabricaDb.getCiudadRepositorio();
            repo.eliminar(ciudad);

        } catch (RepositorioException e) {
            throw new ServicioException("Fallo la ciudad de la ciudad Nombre:" + ciudad.getNombre(), e);
        }
    }

    @Override
    public void listarTodas(IUsuarioInterfazCiudad ui) throws ServicioException {
         ICiudadRepositorio repo;

		try {
			//repo = fabricaDb.getPersonaRepositorio();
            repo=fabricaDb.getCiudadRepositorio();
            List<Ciudad> lista = repo.obtenerTodos();
			ui.setListaCiudades(lista);
		} catch (RepositorioException e) {
			throw new ServicioException("Fallo el listado de ciudades", e) ;
		}
    }

    @Override
    public void listarAlgunos(IUsuarioInterfazCiudad ui, String nombre) throws ServicioException {
       ICiudadRepositorio repo;

		try {

            repo=fabricaDb.getCiudadRepositorio();

            String[] parametrosBusqueda = {nombre};

            /*
            parametrosBusqueda= "jugador.nombre like '%"
                + nombre
                + "%' and jugador.apellido like '%"
                + apellido + "%'" ;
             * */
            List<Ciudad> lista = repo.obtenerAlgunos(parametrosBusqueda);
			ui.setListaCiudades(lista);
		} catch (RepositorioException e) {
			throw new ServicioException("Fallo el listado de ciudades (Busqueda)", e) ;
		}
    }

    public boolean existe(String nombre) throws ServicioException {
       ICiudadRepositorio repo;

		try {

            repo=fabricaDb.getCiudadRepositorio();

            String[] parametrosBusqueda = {nombre};

            return repo.existe(parametrosBusqueda);
            
		} catch (RepositorioException e) {
            
			throw new ServicioException(e.getMessage(), e) ;
		}
    }

}
